package djboom.materials.core {
	import djboom.materials.state.Font;

	import org.casalib.util.NumberUtil;

	import flash.text.StyleSheet;

	/**
	 * Данные.
	 * <br>
	 * 
	 * @author DJ BooM 
	 * @since 06.04.2010
	 * 
	 */

	public class DataCore {

		// ----------------------------------------------------------------------------
		// Константы класса.
		// ----------------------------------------------------------------------------

		public static const TEST_XML:XML = <test>
    <question>
        <text><![CDATA[Средняя плотность - это ...]]></text>
        <answers>
            <answer>
                <text><![CDATA[масса материала, приходящаяся на единицу его объема в естественном состоянии]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[масса материала, приходящаяся на единицу его объема в абсолютно плотном состоянии]]></text>
            </answer>
            <answer>
                <text><![CDATA[среднее арифметическое значение результатов трех ... пяти измерений истинной плотности]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[Истинная плотность - это ...]]></text>
        <answers>
            <answer>
                <text><![CDATA[масса материала, приходящаяся на единицу его объема в естественном состоянии]]></text>
            </answer>
            <answer>
                <text><![CDATA[масса материала, приходящаяся на единицу его объема в абсолютно плотном состоянии]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[среднее арифметическое значение результатов трех ... пяти измерений наиболее близкое к истинному значению]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[По мере увеличения пористости материала его истинная плотность]]></text>
        <answers>
            <answer>
                <text><![CDATA[возрастает]]></text>
            </answer>
            <answer>
                <text><![CDATA[остается неизменной]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[уменьшается]]></text>
            </answer>
            <answer>
                <text><![CDATA[может как возрастать, так и уменьшаться]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[По мере увеличения пористости материала его средняя плотность]]></text>
        <answers>
            <answer>
                <text><![CDATA[возрастает]]></text>
            </answer>
            <answer>
                <text><![CDATA[остается неизменной]]></text>
            </answer>
            <answer>
                <text><![CDATA[уменьшается]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[может как возрастать, так и уменьшаться]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[По мере увеличения влажности материала его истинная плотность]]></text>
        <answers>
            <answer>
                <text><![CDATA[возрастает]]></text>
            </answer>
            <answer>
                <text><![CDATA[остается неизменной]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[уменьшается]]></text>
            </answer>
            <answer>
                <text><![CDATA[может как возрастать, так и уменьшаться]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[По мере увеличения влажности материала его средняя плотность]]></text>
        <answers>
            <answer>
                <text><![CDATA[возрастает]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[остается неизменной]]></text>
            </answer>
            <answer>
                <text><![CDATA[уменьшается]]></text>
            </answer>
            <answer>
                <text><![CDATA[может как возрастать, так и уменьшаться]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[Средняя плотность большинства строительных материалов]]></text>
        <answers>
            <answer>
                <text><![CDATA[меньше истинной плотности]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[больше истинной плотности]]></text>
            </answer>
            <answer>
                <text><![CDATA[равна истинной плотности]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[Единицы измерения средней плотности]]></text>
        <answers>
            <answer>
                <text><![CDATA[кг/м <span class="specialSymbols">3</span>]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[кг/см <span class="specialSymbols">3</span>]]></text>
            </answer>
            <answer>
                <text><![CDATA[г/см <span class="specialSymbols">3</span>]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[см <span class="specialSymbols">3</span>/г]]></text>
            </answer>
            <answer>
                <text><![CDATA[г/м <span class="specialSymbols">3</span>]]></text>
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[Единицы измерения истинной плотности]]></text>
        <answers>
            <answer>
                <text><![CDATA[г/м <span class="specialSymbols">3</span>]]></text>
            </answer>
            <answer>
                <text><![CDATA[кг/см <span class="specialSymbols">3</span>]]></text>
            </answer>
            <answer>
                <text><![CDATA[г/см <span class="specialSymbols">3</span>]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[см <span class="specialSymbols">3</span>/г]]></text>
            </answer>
            <answer>
                <text><![CDATA[кг/м <span class="specialSymbols">3</span>]]></text>
                <istrue />
            </answer>
        </answers>
    </question>
    <question>
        <text><![CDATA[Справедливо равенство]]></text>
        <answers>
            <answer>
                <text><![CDATA[1 кг/м <span class="specialSymbols">3</span> = 1000 г/см <span class="specialSymbols">3</span>]]></text>
            </answer>
            <answer>
                <text><![CDATA[1 г/см <span class="specialSymbols">3</span> = 1000 кг/м <span class="specialSymbols">3</span>]]></text>
                <istrue />
            </answer>
            <answer>
                <text><![CDATA[1 кг/м <span class="specialSymbols">3</span> = 1г/см <span class="specialSymbols">3</span>]]></text>
            </answer>
        </answers>
    </question>
</test>;

		public static const INSTRUCTION_WORK_1:XML = <instructions>
    <instruction>
        <text><![CDATA[Поместите образец на платформу весов]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу значение массы образца с точностью до 1г]]></text>
        <cell>4</cell>       
    </instruction>
    <instruction>
        <text><![CDATA[Рассчитайте объем образца, исходя из его линейных размеров, и введите в таблицу, выразив в cм <span class="specialSymbols">3</span>с точностью до целого числа]]></text>
        <cell>5</cell>       
    </instruction>
    <instruction>
        <text><![CDATA[Рассчитайте среднюю плотность материала и введите полученный результат в таблицу с точностью до 0,01 г/см <span class="specialSymbols">3</span>]]></text>
        <cell>6</cell>       
    </instruction>
    <instruction>
        <text><![CDATA[Выразите среднюю плотность в кг/м <span class="specialSymbols">3</span>и введите в таблицу с точностью до целого числа]]></text>
        <cell>7</cell>
    </instruction>
</instructions>;

		
		public static const INSTRUCTION_WORK_2:XML = <instructions>
    <instruction>
        <text><![CDATA[Поверните ручку арретира, чтобы привести весы в рабочее положение]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Поместите образец на левую чашку весов]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Поместите на правую чашку гири, чтобы привести весы в равновесие]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу значение массы образца с точностью до 0,1 г]]></text>
        <cell>1</cell> 
    </instruction>
    <instruction>
        <text><![CDATA[Поверните ручку арретира, чтобы вывести весы из рабочего положения]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Снимите с чашек и положите рядом с весами образец и гири]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Нажмите кнопку автоматического режима, чтобы обвязать образец нитью]]></text>
        <auto>ropeOnMaterial</auto>
    </instruction>
    <instruction>
        <text><![CDATA[Включите горелку, чтобы расплавить парафин]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Парафинируйте образец. Для этого снимите с крючка и, держась за нить, погрузите образец в расплавленный парафин, а затем выньте и вновь подвесьте на крючок]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Отключите горелку]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Поверните ручку арретира, чтобы привести весы в рабочее положение]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Снимите с крючка остывший образец и поместите на левую чашку весов]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Поместите на правую чашку  гири, чтобы привести весы в равновесие]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу значение массы парафинированного образца с точностью до 0,1 г]]></text>
        <cell>2</cell>
    </instruction>
    <instruction>
        <text><![CDATA[Поверните ручку арретира, чтобы вывести весы из рабочего положения]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Снимите с чашек и положите рядом с весами образец и гири]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Вычислите и введите в таблицу значение массы парафина с точностью до 0,1 г]]></text>
        <cell>3</cell>
    </instruction>
    <instruction>
        <text><![CDATA[Вычислите и введите в таблицу объем парафина, приняв его плотность равной 0,9 г/см <span class="specialSymbols">3</span>]]></text>
        <cell>4</cell>
    </instruction>
    <instruction>
        <text><![CDATA[Нажмите кнопку автоматического режима, чтобы подготовиться к гидростатическому взвешиванию]]></text>
        <auto>showWoodAndGlass</auto>
    </instruction>
    <instruction>
        <text><![CDATA[Поверните ручку арретира, чтобы привести весы в рабочее положение]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Поместите на правую чашку гирю, чтобы привести весы в равновесие]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу вес парафинированного образца в воде]]></text>
        <cell>5</cell>
    </instruction>
    <instruction>
        <text><![CDATA[Поверните ручку арретира, чтобы вывести весы из рабочего положения]]></text>
    </instruction>
    <instruction>
        <text><![CDATA[Вычислите и введите в таблицу объем образца с точностью до 0,1 см <span class="specialSymbols">3</span>]]></text>
        <cell>6</cell>
    </instruction>
    <instruction>
        <text><![CDATA[Вычислите и введите в таблицу значение средней плотности, выразив его в г/см3 с точностью до 0,01]]></text>
        <cell>7</cell>
    </instruction>
    <instruction>
        <text><![CDATA[Вычислите и введите в таблицу значение средней плотности образца, выразив его в кг/м <span class="specialSymbols">3</span> с точностью до целого числа]]></text>
        <cell>8</cell>
    </instruction>
</instructions>;

		
		public static const INSTRUCTION_WORK_3:XML = <instructions>
    <instruction>
        <text><![CDATA[Установите прибор Ле-Шателье под краном склянки с дистиллированной водой]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Откройте кран, чтобы заполнить прибор Ле-Шателье водой до нижней метки]]></text>      
    </instruction>
    <instruction>
        <text><![CDATA[Нажмите кнопку автоматического режима, чтобы взять навеску испытуемого материала]]></text>
        <auto>AutoAction1</auto>      
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу значение массы стаканчика с порошком с точностью до 0,01г]]></text>
        <cell>1</cell> 
    </instruction>
    <instruction>
        <text><![CDATA[Нажмите кнопку автоматического режима, чтобы пересыпать испытуемый материал в прибор Ле-Шателье]]></text>
        <auto>AutoAction2</auto>         
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу значение массы стаканчика с остатком порошка с точностью до 0,01г]]></text>
        <cell>2</cell>       
    </instruction>
    <instruction>
        <text><![CDATA[Рассчитайте и введите в таблицу значение массы пробы, высыпанной в прибор Ле-Шателье с точностью до 0,01г]]></text>
        <cell>3</cell> 
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу показание прибора Ле-Шателье с точностью до 0,1 см <span class="specialSymbols">3</span>, которое соответствует абсолютному объему пробы]]></text>
        <cell>4</cell>       
    </instruction>
    <instruction>
        <text><![CDATA[Рассчитайте и введите в таблицу истинную плотность материала, выразив ее в г/см <span class="specialSymbols">3</span> с точностью до 0,01]]></text>
        <cell>5</cell>  
    </instruction>
    <instruction>
        <text><![CDATA[Введите в таблицу истинную плотность материала, выразив ее в кг/м <span class="specialSymbols">3</span> с точностью до целого числа]]></text>
        <cell>6</cell>
    </instruction>
</instructions>;

		// ----------------------------------------------------------------------------
		// Свойства класса.
		// ----------------------------------------------------------------------------

		public static var _materialsWork1XML:XML;
		public static var _materialsWork2XML:XML;
		public static var _materialsWork3XML:XML;

		public static var STYLESHEET:StyleSheet = new StyleSheet();

		// ----------------------------------------------------------------------------
		// Конструктор.
		// ----------------------------------------------------------------------------

		public function DataCore() {
		}	 

		// ----------------------------------------------------------------------------
		// Методы класса.
		// ----------------------------------------------------------------------------

		private static function initStyles():void {
			STYLESHEET.setStyle(".specialSymbols", {fontFamily: Font.SPECIAL, fontSize: "18"});
			STYLESHEET.setStyle(".strong", {color: "#709402", fontWeight: "bold"});			STYLESHEET.setStyle(".16px", {fontSize: "16"});
		}

		private static function initWork1():void {
			var weightMaterials1:int = NumberUtil.randomIntegerWithinRange(2200, 2500);
			var weightMaterials2:int = NumberUtil.randomIntegerWithinRange(500, 800);
			var weightMaterials3:int = NumberUtil.randomIntegerWithinRange(1000, 1500);
			var weightMaterials4:int = NumberUtil.randomIntegerWithinRange(3300, 3500);
			var weightMaterials5:int = NumberUtil.randomIntegerWithinRange(2350, 2750);
			var weightMaterials6:int = NumberUtil.randomIntegerWithinRange(3500, 3800);
			
			_materialsWork1XML = <materials>
              <material select="false" name="Тяжелый бетон" bitmapdata={BitmapDataCore.WORK1_SAMPLE1}
                        sampleBitmapData={BitmapDataCore.WORK1_SAMPLE1_WORK}
                        weight={weightMaterials1} length="100" base="100" height="100"
                        description="Искусственный строительный камень, получаемый в результате затвердевания рационально подобранной, тщательно перемешанной и уплотненной смеси, которая состоит из цементного вяжущего, воды затворения и плотных заполнителей. Крупным заполнителем служит природный гравий или щебень из плотных горных пород, например, из гранита. Мелким заполнителем служит природный песок. Среднюю плотность тяжелого бетона определяют на контрольных образцах-кубах с ребром 100 мм." />
              <material select="false" name="Керамзитобетон" bitmapdata={BitmapDataCore.WORK1_SAMPLE2}
                        sampleBitmapData={BitmapDataCore.WORK1_SAMPLE2_WORK}
                        weight={weightMaterials3} length="100" base="100" height="100"
                        description="Искусственный строительный камень, получаемый в результате затвердевания рационально подобранной, тщательно перемешанной и уплотненной смеси, которая состоит из цементного вяжущего, воды затворения и пористых заполнителей. Крупным заполнителем служит керамзитовый гравий. Мелким заполнителем служит керамзитовый песок или плотный природный песок. Среднюю плотность керамзитобетона определяют на контрольных образцах-кубах с ребром 100 мм." />
              <material select="false" name="Ячеистый бетон" bitmapdata={BitmapDataCore.WORK1_SAMPLE3}
                        sampleBitmapData={BitmapDataCore.WORK1_SAMPLE3_WORK}
                        weight={weightMaterials2} length="100" base="100" height="100"
                        description="Искусственный каменный материал на основе минерального вяжущего и кремнеземистого компонента с равномерно распределенными по объему порами-ячейками. Получают в результате затвердевания смеси, вспученной при помощи порообразователя. Среднюю плотность ячеистого бетона определяют на контрольных образцах-кубах с ребром 100 мм." />
              <material select="false" name="Кирпич керамический полнотелый" bitmapdata={BitmapDataCore.WORK1_SAMPLE4}
                        sampleBitmapData={BitmapDataCore.WORK1_SAMPLE4_WORK}
                        weight={weightMaterials4} length="250" base="120" height="65"
                        description="Керамическое штучное изделие, предназначенное для кладки наружных и внутренних стен, а также печей и дымовых труб. Имеет форму прямоугольного параллелепипеда номинальными размерами 250х120х65 мм. Изготовляется из глины путем формования и последующего обжига при высоких температурах." />
              <material select="false" name="Кирпич керамический пустотелый" bitmapdata={BitmapDataCore.WORK1_SAMPLE5}
                        sampleBitmapData={BitmapDataCore.WORK1_SAMPLE5_WORK}
                        weight={weightMaterials5} length="250" base="120" height="65"
                        description="Керамическое штучное изделие, предназначенное для кладки наружных и внутренних стен, кроме помещений с влажным режимом эксплуатации. Имеет форму прямоугольного параллелепипеда номинальными размерами 250х120х65 мм. Сквозные пустоты различной формы (цилиндрические, щелевидные, квадратные) обеспечивают улучшенные теплотехнические характеристики кирпича. Изготовляется из глины путем формования и последующего обжига при высоких температурах." />
              <material select="false" name="Кирпич силикатный" bitmapdata={BitmapDataCore.WORK1_SAMPLE6}
                        sampleBitmapData={BitmapDataCore.WORK1_SAMPLE6_WORK}
                        weight={weightMaterials6} length="250" base="120" height="65"
                        description="Штучное изделие, предназначенное для кладки наружных и внутренних стен зданий и сооружений. Имеет форму прямоугольного параллелепипеда номинальными размерами 250х120х65 мм.  Изготовляется способом прессования увлажненной смеси из кварцевого песка и извести с последующим твердением в автоклаве." />
            </materials>;
            
			var materialsList:XMLList = _materialsWork1XML.child("material");
            
			for each (var material:XML in materialsList) {
				var name:String = material.attribute("name").toString();
				var bitmapdata:String = material.attribute("bitmapdata").toString();
				var sampleBitmapData:String = material.attribute("sampleBitmapData").toString();
				var weight:String = material.attribute("weight").toString();
				var length:String = material.attribute("length").toString();
				var base:String = material.attribute("base").toString();
				var height:String = material.attribute("height").toString();
				var select:String = material.attribute("select").toString();
				var description:String = material.attribute("description").toString();

				// Объем, см3
				var amount:int = Math.floor((int(length) * int(base) * int(height)) / 1000);
				
				// Средняя плотность г/см3  
				var averageHardness_G:Number = NumberUtil.roundDecimalToPlace(int(weight) / amount, 2);
				 
				// Средняя плотность, кг/м3
				var averageHardness_KG:int = Math.floor(averageHardness_G * 1000);
                
				// Обновляем XML.
				var updatedMaterial:XML = <material
				    name={name}
				    bitmapdata={bitmapdata}
				    sampleBitmapData={sampleBitmapData}
				    weight={weight}
				    length={length}
				    base={base}
				    height={height}
				    select={select}
				    description={description}
				    amount={amount}
				    averageHardness_G={NumberUtil.addBelowZero(averageHardness_G)}
				    averageHardness_KG={averageHardness_KG}
                />;
				    
				_materialsWork1XML.replace(material.childIndex(), updatedMaterial);
			}
		}

		private static function initWork2():void {
			// Масса образца, г
			var weightMaterials1:Number = NumberUtil.roundDecimalToPlace(NumberUtil.randomWithinRange(80, 100), 1);
			var weightMaterials2:Number = NumberUtil.roundDecimalToPlace(NumberUtil.randomWithinRange(101, 130), 1);
			
			var weightMaterials3Array:Array = [145.3, 158.8];
			var weightMaterials3:Number = weightMaterials3Array[NumberUtil.randomIntegerWithinRange(0, 1)];
			
			_materialsWork2XML = <materials>
              <material select="false" name="Вулканический туф" bitmapdata={BitmapDataCore.WORK2_SAMPLE1}
                        sampleBitmapData={BitmapDataCore.WORK2_SAMPLE_MATERIAL1}
                        weight={weightMaterials1} 
                        description="Пористая горная порода, образовавшаяся в результате цементации продуктов вулканических извержений: пеплов, пемзы. Легко поддается технологической обработке. Используется в виде блоков для кладки стен зданий, в виде плит для облицовки фасадов, в виде щебня как заполнитель для легкого бетона." />
              <material select="false" name="Известняк" bitmapdata={BitmapDataCore.WORK2_SAMPLE2}
                        sampleBitmapData={BitmapDataCore.WORK2_SAMPLE_MATERIAL2}
                        weight={weightMaterials2}
                        description="Горная порода осадочного происхождения. Состоит, главным образом, из кальцита. По структуре известняки разделяют на плотные, пористые, мраморовидные, ракушечники, землистые (мел). Используется в виде плит как облицовочный материал, в виде щебня как заполнитель для бетона. Сырьевой материал для производства цементов и извести." />
              <material select="false" name="Гранит" bitmapdata={BitmapDataCore.WORK2_SAMPLE3}
                        sampleBitmapData={BitmapDataCore.WORK2_SAMPLE_MATERIAL3}
                        weight={weightMaterials3}
                        description="Горная порода магматического происхождения. Состоит из кварца, полевых шпатов и слюды. Отличается высокой плотностью и прочностью. Применяют в качестве облицовочного камня и как заполнитель для бетона." />
            </materials>;
             
			var materialsList:XMLList = _materialsWork2XML.child("material");
            
			for each (var material:XML in materialsList) {
				var select:String = material.attribute("select").toString();
				var name:String = material.attribute("name").toString();
				var bitmapdata:String = material.attribute("bitmapdata").toString();
				var sampleBitmapData:String = material.attribute("sampleBitmapData").toString();
				var weight:Number = Number(material.attribute("weight").toString());
				var description:String = material.attribute("description").toString();

				// Масса парафина, г
				var waxweight:Number;
				var waxweightString:String;

				if (name != "Гранит") {
					waxweight = NumberUtil.randomIntegerWithinRange(10, 11) / 10;
					waxweightString = waxweight == 1 ? "1.0" : "1.1";
				} else {
					waxweight = 1;
					waxweightString = "1.0";
				}
				
				// Масса парафинированного образца, г
				var materialwax:Number = NumberUtil.roundDecimalToPlace(weight + waxweight, 1);				
				// Объем парафина, см3
				var waxamount:Number = NumberUtil.roundDecimalToPlace(waxweight / 0.9, 1);
				
				// Вес в воде парафинированного образца, г
				var materialwaxwater:Number;
				
				var V2:Number;
				
				if (name != "Гранит") {
					V2 = NumberUtil.randomWithinRange(55, 60);
					materialwaxwater = NumberUtil.roundDecimalToPlace(materialwax - V2, 1);
				} else {
					V2 = weight == 145.3 ? 55 : 60;
					materialwaxwater = NumberUtil.roundDecimalToPlace(materialwax - V2, 1);
				}
				
				// Объем образца, см3
				var materialamount:Number = NumberUtil.roundDecimalToPlace(V2 - waxamount, 1);
				
				// Средняя плотность образца, г/см3
				var materialaverage_g:Number = NumberUtil.roundDecimalToPlace(weight / materialamount, 2);
				
				// Средняя плотность образца, кг/м3
				var averageHardness_KG:int = materialaverage_g * 1000;

				// Обновляем XML.
				var updatedMaterial:XML = <material
				    select={select}
				    name={name}
				    weight={weight}
				    waxweight={waxweightString}
				    materialwax={materialwax}
				    waxamount={waxamount}
				    materialwaxwater={materialwaxwater}
				    materialamount={materialamount}
				    materialaverage_g={NumberUtil.addBelowZero(materialaverage_g)}
				    averageHardness_KG={averageHardness_KG}
				    bitmapdata={bitmapdata}
				    sampleBitmapData={sampleBitmapData}
				    description={description}
                />;
                
				_materialsWork2XML.replace(material.childIndex(), updatedMaterial);
			}
		}

		// ----------------------------------------------------------------------------
		// Публичные методы.
		// ----------------------------------------------------------------------------

		public static function init():void {
			initStyles();
						initWork1();			initWork2();
		}

		public static function initWork3():void {
			_materialsWork3XML = <materials></materials>;
			
			var materialsList:XMLList = DataCore._materialsWork1XML.child("material").(@select == "true");

			var materialName:String;
			var materialBData:String;
			var materialSampleBData:String;
			var materialDescription:String;			var averageHardness_KG:String;
			var updatedMaterial:XML;
			
			for each (var materialXML:XML in materialsList) {
				materialName = materialXML.attribute("name").toString();
				materialBData = materialXML.attribute("bitmapdata").toString();
				materialSampleBData = materialXML.attribute("sampleBitmapData").toString();
				materialDescription = materialXML.attribute("description").toString();				averageHardness_KG = materialXML.attribute("averageHardness_KG").toString();
                        
				updatedMaterial = <material select="false" name={materialName} bitmapdata={materialBData} sampleBitmapData={materialSampleBData} description={materialDescription} averageHardness_KG={averageHardness_KG} />;
				_materialsWork3XML.appendChild(updatedMaterial);
			}
			
			materialsList = DataCore._materialsWork2XML.child("material").(@select == "true");
			
			for each (materialXML in materialsList) {
				materialName = materialXML.attribute("name").toString();
				materialBData = materialXML.attribute("bitmapdata").toString();
				materialSampleBData = materialXML.attribute("sampleBitmapData").toString();
				materialDescription = materialXML.attribute("description").toString();				averageHardness_KG = materialXML.attribute("averageHardness_KG").toString();
                        
				updatedMaterial = <material select="false" name={materialName} bitmapdata={materialBData} sampleBitmapData={materialSampleBData} description={materialDescription}  averageHardness_KG={averageHardness_KG} />;
				_materialsWork3XML.appendChild(updatedMaterial);
			}
            
			materialsList = _materialsWork3XML.child("material");
            
			for each (materialXML in materialsList) {
				var materialSelect:String = materialXML.attribute("select").toString();				materialName = materialXML.attribute("name").toString();
				materialBData = materialXML.attribute("bitmapdata").toString();
				materialSampleBData = materialXML.attribute("sampleBitmapData").toString();
				materialDescription = materialXML.attribute("description").toString();				averageHardness_KG = materialXML.attribute("averageHardness_KG").toString();
                
				// Абсолютный объем пробы, см3
				var absoluteAmountSample:Number = NumberUtil.randomIntegerWithinRange(205, 215) / 10;
				var absoluteAmountSampleString:String = absoluteAmountSample == 21 ? "21.0" : String(absoluteAmountSample);
                
				// Масса пробы, г
				var weightSample:Number;
               
				switch(absoluteAmountSample) {
					case 20.5:
						weightSample = NumberUtil.randomIntegerWithinRange(553, 564) / 10;
						break;
					case 20.6:
						weightSample = NumberUtil.randomIntegerWithinRange(556, 566) / 10;
						break;
					case 20.7:
						weightSample = NumberUtil.randomIntegerWithinRange(559, 569) / 10;
						break;
					case 20.8:
						weightSample = NumberUtil.randomIntegerWithinRange(562, 572) / 10;
						break;
					case 20.9:
						weightSample = NumberUtil.randomIntegerWithinRange(564, 575) / 10;
						break;
					case 21:
						weightSample = NumberUtil.randomIntegerWithinRange(567, 577) / 10;
						break;
					case 21.1:
						weightSample = NumberUtil.randomIntegerWithinRange(570, 580) / 10;
						break;
					case 21.2:
						weightSample = NumberUtil.randomIntegerWithinRange(572, 583) / 10;
						break;
					case 21.3:
						weightSample = NumberUtil.randomIntegerWithinRange(575, 585) / 10;
						break;
					case 21.4:
						weightSample = NumberUtil.randomIntegerWithinRange(578, 588) / 10;
						break;
					case 21.5:
						weightSample = NumberUtil.randomIntegerWithinRange(580, 590) / 10;
						break;
				}
               
				// Масса стаканчика с порошком, г
				var weightCupPowder:Number = NumberUtil.randomIntegerWithinRange(7500, 8000) / 100;
               
				// Масса стаканчика с остатком порошка, г
				var weightCupRestPowder:Number = NumberUtil.roundDecimalToPlace((weightCupPowder - weightSample), 2);
               
				// Истинная плотность, г/см3
				var trueDenSityG:Number = NumberUtil.roundDecimalToPlace((weightSample / absoluteAmountSample), 2);
               
				// Истинная плотность, кг/м3
				var trueDenSityKG:int = trueDenSityG * 1000;

				// Обновляем XML.
				updatedMaterial = <material
                    select={materialSelect}
                    weightCupPowder={NumberUtil.addBelowZero(weightCupPowder)}
                    weightCupRestPowder={NumberUtil.addBelowZero(weightCupRestPowder)}
                    weightSample={NumberUtil.addBelowZero(weightSample)}
                    absoluteAmountSample={absoluteAmountSampleString}
                    trueDenSityG={NumberUtil.addBelowZero(trueDenSityG)}
                    trueDenSityKG={trueDenSityKG}
                    name={materialName}
                    bitmapdata={materialBData}
                    sampleBitmapData={materialSampleBData}
                    description={materialDescription}                    averageHardness_KG={averageHardness_KG}
                />;
                
				_materialsWork3XML.replace(materialXML.childIndex(), updatedMaterial);
			}
		}

		/**
		 * Выбор образца из списка.
		 * 
		 */

		public static function selectableSample(materialsXML:XML, materialName:String, selected:Boolean):void {
			var pattern:RegExp = /(.*select=\W)(\w+)(\W.*)/;
			
			var materialsList:XMLList = materialsXML.child("material").(@name == materialName);
			
			for each (var material:XML in materialsList) {
				var materialString:String = material.toXMLString();
				materialString = materialString.replace(pattern, "$1" + selected + "$3");
				materialsXML.replace(material.childIndex(), new XML(materialString));
			}
		}
	}
}
